/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import modelo.Proveedor;

/**
 *
 * @author Felipe
 */
public class ProveedorDAO {

    private Connection conexion;

    public Connection getConexion() {
        return conexion;
    }

    public void setConexion(Connection conexion) {
        this.conexion = conexion;
    }

    Proveedor buscarPorNombre(String nombreProveedor) {
        PreparedStatement sentencia;
        Proveedor registro = null;
        ResultSet resultado;
        try {
            String sql = "select *  from PROVEEDOR where NOMBRE = ?";
            sentencia = conexion.prepareStatement(sql);
            sentencia.setString(1, nombreProveedor);
            resultado = sentencia.executeQuery();
            if (resultado.next()) {
                registro = new Proveedor();

                registro.setNombreProveedor(resultado.getString("NOMBRE"));
                registro.setRutProveedor(resultado.getInt("RUT_PROVEEDOR"));
                registro.setRepresentante(resultado.getString("REPRESENTANTE"));
                registro.setNombreVendedor(resultado.getString("VENDEDOR"));
                registro.setTelefonoVendedor(resultado.getString("TELEFONO_VENDEDOR"));
                registro.setTelefonoEmpresa(resultado.getString("TELEFONO_EMPRESA"));
                registro.setEstado(resultado.getBoolean("ESTADO"));
            }

        } catch (SQLException ex) {

        }
        return registro;

    }
    
    Proveedor buscarPorCodigo(int codigo) {
        PreparedStatement sentencia;
        Proveedor registro = null;
        ResultSet resultado;
        try {
            String sql = "select *  from PROVEEDOR where RUT_PROVEEDOR = ?";
            sentencia = conexion.prepareStatement(sql);
            sentencia.setInt(1, codigo);
            resultado = sentencia.executeQuery();
            if (resultado.next()) {
                registro = new Proveedor();
                registro.setNombreProveedor(resultado.getString("NOMBRE"));
                registro.setRutProveedor(resultado.getInt("RUT_PROVEEDOR"));
                registro.setRepresentante(resultado.getString("REPRESENTANTE"));
                registro.setNombreVendedor(resultado.getString("VENDEDOR"));
                registro.setTelefonoVendedor(resultado.getString("TELEFONO_VENDEDOR"));
                registro.setTelefonoEmpresa(resultado.getString("TELEFONO_EMPRESA"));
                registro.setEstado(resultado.getBoolean("ESTADO"));
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
        }
        return registro;

    }

    public int insertar(Proveedor prov) {
        PreparedStatement sentencia = null;
        int filas = 0;
        try {
            String nombreProveedor = prov.getNombreProveedor();
            int rutProveedor = prov.getRutProveedor();
            String representante = prov.getRepresentante();
            String vendedor = prov.getNombreVendedor();
            String telefonoVendedor = prov.getTelefonoVendedor();
            String telefonoEmpresa = prov.getTelefonoEmpresa();
            boolean estado = prov.getEstado();

            String sql = "INSERT INTO PROVEEDOR (RUT_PROVEEDOR, NOMBRE, REPRESENTANTE, VENDEDOR, TELEFONO_VENDEDOR, TELEFONO_EMPRESA, ESTADO) VALUES (?,?,?,?,?,?,?)";
            sentencia = conexion.prepareStatement(sql);
            sentencia.setInt(1, rutProveedor);
            sentencia.setString(2, nombreProveedor);
            sentencia.setString(3, representante);
            sentencia.setString(4, vendedor);
            sentencia.setString(5, telefonoVendedor);
            sentencia.setString(6, telefonoEmpresa);
            sentencia.setBoolean(7, estado);
            filas = sentencia.executeUpdate();
            
        } catch (SQLException ex) {
            ex.printStackTrace();
            throw new RuntimeException("error al insertar", ex);
        } finally {
            try {
                sentencia.close();
            } catch (Exception noGestionar) {
            }

        }
        return filas;
    }

    public Collection<Proveedor> buscarTodos() {
        Collection<Proveedor> lista = new ArrayList<Proveedor>();
        PreparedStatement sentencia = null;
        ResultSet resultado = null;
        try {
            String sql = "select * from PROVEEDOR";
            sentencia = conexion.prepareStatement(sql);
            resultado = sentencia.executeQuery();
            try {
                while (resultado.next()) {
                    Proveedor registro = new Proveedor();

                    registro.setNombreProveedor(resultado.getString("NOMBRE"));
                    registro.setRutProveedor(resultado.getInt("RUT_PROVEEDOR"));
                    registro.setRepresentante(resultado.getString("REPRESENTANTE"));
                    registro.setNombreVendedor(resultado.getString("VENDEDOR"));
                    registro.setTelefonoVendedor(resultado.getString("TELEFONO_VENDEDOR"));
                    registro.setTelefonoEmpresa(resultado.getString("TELEFONO_EMPRESA"));
                    registro.setEstado(resultado.getBoolean("ESTADO"));
                    // finalmente, agregar a la coleccion
                    lista.add(registro);
                }
            } catch (NullPointerException ex) {
                return null;

            }

        } catch (SQLException ex) {
            //TODO Gestionar mejor esta exception
            ex.printStackTrace();
        } finally {
            try {
                resultado.close();
            } catch (Exception noGestionar) {
            }
            try {
                sentencia.close();
            } catch (Exception noGestionar) {
            }
        }
        return lista;
    }

    void eliminar(int codigo,boolean estado) {
    PreparedStatement sentencia = null;
        try {
            String sql = "UPDATE PROVEEDOR SET ESTADO = ?  WHERE  RUT_PROVEEDOR = ?";
            sentencia = conexion.prepareStatement(sql);
            sentencia.setBoolean(1, estado);
            sentencia.setInt(2, codigo);
            sentencia.executeUpdate();

        } catch (SQLException ex) {
            throw new RuntimeException("modificar estado proveedor", ex);
            
        }
    }

    int modificar(Proveedor prov) {
    PreparedStatement sentencia = null;
    int filas = 0;
        try {
            
            String sql = "UPDATE PROVEEDOR set NOMBRE = ?, REPRESENTANTE =?, VENDEDOR= ?, TELEFONO_VENDEDOR= ?, TELEFONO_EMPRESA= ?, ESTADO= ? where RUT_PROVEEDOR = ?";
            sentencia = conexion.prepareStatement(sql);
            sentencia.setInt(7, prov.getRutProveedor());
            sentencia.setString(1, prov.getNombreProveedor());
            sentencia.setString(2, prov.getRepresentante());
            sentencia.setString(3, prov.getNombreVendedor());
            sentencia.setString(4, prov.getTelefonoVendedor());
            sentencia.setString(5, prov.getTelefonoEmpresa());
            sentencia.setBoolean(6, true);
            
            filas = sentencia.executeUpdate();

        } catch (SQLException ex) {            
            ex.printStackTrace();
            throw new RuntimeException("error update producto", ex);
        } finally {
            try {
                sentencia.close();
            } catch (Exception noGestionar) {
            }

        }
   return filas ;

    }
    
  public Collection<Proveedor> buscarPorParteNombre(String nombre) {
        Collection<Proveedor> lista = new ArrayList<Proveedor>();
        PreparedStatement sentencia = null;
        ResultSet resultado = null;
        try {
            String sql = "SELECT * FROM PROVEEDOR  WHERE PROVEEDOR.NOMBRE like ?";

            sentencia = conexion.prepareStatement(sql);
            sentencia.setString(1, "%" + nombre + "%");
            resultado = sentencia.executeQuery();
            while (resultado.next()) {
                    Proveedor registro = new Proveedor();

                    registro.setNombreProveedor(resultado.getString("NOMBRE"));
                    registro.setRutProveedor(resultado.getInt("RUT_PROVEEDOR"));
                    registro.setRepresentante(resultado.getString("REPRESENTANTE"));
                    registro.setNombreVendedor(resultado.getString("VENDEDOR"));
                    registro.setTelefonoVendedor(resultado.getString("TELEFONO_VENDEDOR"));
                    registro.setTelefonoEmpresa(resultado.getString("TELEFONO_EMPRESA"));
                    registro.setEstado(resultado.getBoolean("ESTADO"));
                    // finalmente, agregar a la coleccion
                    lista.add(registro);
            }

        } catch (SQLException ex) {
            //TODO Gestionar mejor esta exception
            ex.printStackTrace();
        } finally {
            try {
                resultado.close();
            } catch (Exception noGestionar) {
            }
            try {
                sentencia.close();
            } catch (Exception noGestionar) {
            }
        }
        return lista;
    }  
  
      public Collection<Proveedor> buscarPorParteCodigo(int codigo) {
        Collection<Proveedor> lista = new ArrayList<Proveedor>();
        PreparedStatement sentencia = null;
        ResultSet resultado = null;
        try {
            String sql = "select * from PROVEEDOR where PROVEEDOR.RUT_PROVEEDOR  like %?%";
            
            sentencia = conexion.prepareStatement(sql);
            sentencia.setInt(1,codigo);
            resultado = sentencia.executeQuery();
            while (resultado.next()) {
                    Proveedor registro = new Proveedor();

                    registro.setNombreProveedor(resultado.getString("NOMBRE"));
                    registro.setRutProveedor(resultado.getInt("RUT_PROVEEDOR"));
                    registro.setRepresentante(resultado.getString("REPRESENTANTE"));
                    registro.setNombreVendedor(resultado.getString("VENDEDOR"));
                    registro.setTelefonoVendedor(resultado.getString("TELEFONO_VENDEDOR"));
                    registro.setTelefonoEmpresa(resultado.getString("TELEFONO_EMPRESA"));
                    registro.setEstado(resultado.getBoolean("ESTADO"));
                    // finalmente, agregar a la coleccion
                    lista.add(registro);
            }

        } catch (SQLException ex) {
            ex.printStackTrace();
            throw new RuntimeException("error al buscar por parte codigo", ex);
        } finally {
            try {
                resultado.close();
            } catch (Exception noGestionar) {
            }
            try {
                sentencia.close();
            } catch (Exception noGestionar) {
            }
        }
        return lista;
    }
  
  
    
}
